/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Compilador.Lexico.Automatos;

import java.util.ArrayList;

/**
 *
 * @author Rafa
 */
public class AutomatoComentario extends Automato{
     private int estadosPercorridos;
     private boolean comentarioLongo;

    

    public AutomatoComentario() {
        this.estadosAutomatos = new ArrayList<EstadoAutomato>();
        this.criaEstados();
        this.comentarioLongo = false;
     
    }

    //retorna -1 se não reconheceu.
    //retorna 0 se reconheceu e é um comentário de linha
    //retorna 1 se reconheceu e é um comentário longo
    //retorna 2 se reconheceu simbolo mas ainda não é um estado final
   
 
    public int addSimbolo(char simbolo) {
        this.estadoAtual = this.estadoAtual.getEstado(simbolo);
        if(estadoAtual != null && estadoAtual.getNome().equals("q4")){
           comentarioLongo = true;
        }
            
        this.estadosPercorridos++;
          if(estadoAtual == null){
            return -1;
        }
      
       else if(estadoAtual.isEstadoFinal){
           if(!comentarioLongo){
               return 0;
           }
           else return 1;
        }
       else return 2;
      
        


    }
    
    public boolean isComentarioLongo(){
       return comentarioLongo;
    }

    private void criaEstados() {
        EstadoAutomato q0, q1, q2, q3, q4, q5, q6;
        q0 = null;
        q1 = null;
        q2 = null;
        q3 = null;
        q4 = null;
        q5 = null;
        q6 = null;
   


        //Cria estados;
        q0 = new EstadoAutomato(false, false, "q0");
        q1 = new EstadoAutomato(false, false, "q1");
        q2 = new EstadoAutomato(false, false, "q2");
        q3 = new EstadoAutomatoEmpilha(false, false, "q3", '=', this);
        q4 = new EstadoAutomato(false, true, "q4");
        q5 =  new EstadoAutomatoDesempilha(false, false, "q5", '=', this);
        q6 = new EstadoAutomato(true, false, "q6");
       
  
        q0.addTransicao('-', q1);
        q1.addTransicao('-', q2);
        q2.addTransicao('[', q3);
        q2.setEstadoDefault(q6);
        q3.addTransicao('=', q3);
        q3.setEstadoDefault(q6);
        q3.addTransicao('[', q4);
        q4.addTransicao(']', q5);
        q5.addTransicao('=', q5);
        q5.addTransicao(']', q6);
        this.estadoAtual = q0;
        estadosAutomatos.add(q0);
        estadosAutomatos.add(q1);
        estadosAutomatos.add(q2);
        estadosAutomatos.add(q3);
        estadosAutomatos.add(q4);
        estadosAutomatos.add(q5);
        estadosAutomatos.add(q6);




    }
}
